export enum Lang {
  /** Chinese(Simplified)/中文(简体) */
  'zh-CN' = 'zh-CN',
  /** Chinese(Traditional)/中文(繁体) */
  'zh-TW' = 'zh-TW',
  /** English/英语 */
  'en' = 'en',
  /** Afrikaans/南非荷兰语 */
  'af' = 'af',
  /** Albanian/阿尔巴尼亚语 */
  'sq' = 'sq',
  /** Amharic/阿姆哈拉语 */
  'am' = 'am',
  /** Arabic/阿拉伯语 */
  'ar' = 'ar',
  /** Armenian/亚美尼亚语 */
  'hy' = 'hy',
  /** Azerbaijani/阿塞拜疆语 */
  'az' = 'az',
  /** Basque/巴斯克语 */
  'eu' = 'eu',
  /** Belarusian/白俄罗斯语 */
  'be' = 'be',
  /** Bengali/孟加拉语 */
  'bn' = 'bn',
  /** Bosnian/波斯尼亚语 */
  'bs' = 'bs',
  /** Bulgarian/保加利亚语 */
  'bg' = 'bg',
  /** Catalan/加泰罗尼亚语 */
  'ca' = 'ca',
  /** Cebuano/宿雾语 */
  'ceb' = 'ceb',
  /** Chichewa/奇切瓦语 */
  'ny' = 'ny',
  /** Corsican/科西嘉语 */
  'co' = 'co',
  /** Croatian/克罗地亚语 */
  'hr' = 'hr',
  /** Czech/捷克语 */
  'cs' = 'cs',
  /** Danish/丹麦语 */
  'da' = 'da',
  /** Dutch/荷兰语 */
  'nl' = 'nl',
  /** Esperanto/世界语 */
  'eo' = 'eo',
  /** Estonian/爱沙尼亚语 */
  'et' = 'et',
  /** Filipino/菲律宾语 */
  'tl' = 'tl',
  /** Finnish/芬兰语 */
  'fi' = 'fi',
  /** French/法语 */
  'fr' = 'fr',
  /** Frisian/弗里斯兰语 */
  'fy' = 'fy',
  /** Galician/加利西亚语 */
  'gl' = 'gl',
  /** Georgian/格鲁吉亚语 */
  'ka' = 'ka',
  /** German/德语 */
  'de' = 'de',
  /** Greek/希腊语 */
  'el' = 'el',
  /** Gujarati/古吉拉特语 */
  'gu' = 'gu',
  /** Haitian Creole/海地克里奥尔语 */
  'ht' = 'ht',
  /** Hawaiian/夏威夷语 */
  'haw' = 'haw',
  /** Hebrew/希伯来语 */
  'iw' = 'iw',
  /** Hindi/印地语 */
  'hi' = 'hi',
  /** Hmong/苗语 */
  'hmn' = 'hmn',
  /** Hungarian/匈牙利语 */
  'hu' = 'hu',
  /** Icelandic/冰岛语 */
  'is' = 'is',
  /** Igbo/伊博语 */
  'ig' = 'ig',
  /** Indonesian/印度尼西亚语 */
  'id' = 'id',
  /** Irish/爱尔兰语 */
  'ga' = 'ga',
  /** Italian/意大利语 */
  'it' = 'it',
  /** Japanese/日语 */
  'ja' = 'ja',
  /** Javanese/爪哇语 */
  'jw' = 'jw',
  /** Kannada/卡纳达语 */
  'kn' = 'kn',
  /** Kazakh/哈萨克语 */
  'kk' = 'kk',
  /** Khmer/高棉语 */
  'km' = 'km',
  /** Korean/韩语 */
  'ko' = 'ko',
  /** Kurdish/库尔德语 */
  'ku' = 'ku',
  /** Kyrgyz/吉尔吉斯语 */
  'ky' = 'ky',
  /** Lao/老挝语 */
  'lo' = 'lo',
  /** Latin/拉丁语 */
  'la' = 'la',
  /** Latvian/拉脱维亚语 */
  'lv' = 'lv',
  /** Lithuanian/立陶宛语 */
  'lt' = 'lt',
  /** Luxembourgish/卢森堡语 */
  'lb' = 'lb',
  /** Macedonian/马其顿语 */
  'mk' = 'mk',
  /** Malagasy/马达加斯加语 */
  'mg' = 'mg',
  /** Malay/马来语 */
  'ms' = 'ms',
  /** Malayalam/马拉雅拉姆语 */
  'ml' = 'ml',
  /** Maltese/马耳他语 */
  'mt' = 'mt',
  /** Maori/毛利语 */
  'mi' = 'mi',
  /** Marathi/马拉地语 */
  'mr' = 'mr',
  /** Mongolian/蒙古语 */
  'mn' = 'mn',
  /** Myanmar (Burmese)/缅甸语 */
  'my' = 'my',
  /** Nepali/尼泊尔语 */
  'ne' = 'ne',
  /** Norwegian/挪威语 */
  'no' = 'no',
  /** Pashto/普什图语 */
  'ps' = 'ps',
  /** Persian/波斯语 */
  'fa' = 'fa',
  /** Polish/波兰语 */
  'pl' = 'pl',
  /** Portuguese/葡萄牙语 */
  'pt' = 'pt',
  /** Punjabi/旁遮普语 */
  'pa' = 'pa',
  /** Romanian/罗马尼亚语 */
  'ro' = 'ro',
  /** Russian/俄语 */
  'ru' = 'ru',
  /** Samoan/萨摩亚语 */
  'sm' = 'sm',
  /** Scots Gaelic/苏格兰盖尔语 */
  'gd' = 'gd',
  /** Serbian/塞尔维亚语 */
  'sr' = 'sr',
  /** Sesotho/塞索托语 */
  'st' = 'st',
  /** Shona/绍纳语 */
  'sn' = 'sn',
  /** Sindhi/信德语 */
  'sd' = 'sd',
  /** Sinhala/僧伽罗语 */
  'si' = 'si',
  /** Slovak/斯洛伐克语 */
  'sk' = 'sk',
  /** Slovenian/斯洛文尼亚语 */
  'sl' = 'sl',
  /** Somali/索马里语 */
  'so' = 'so',
  /** Spanish/西班牙语 */
  'es' = 'es',
  /** Sundanese/巽他语 */
  'su' = 'su',
  /** Swahili/斯瓦希里语 */
  'sw' = 'sw',
  /** Swedish/瑞典语 */
  'sv' = 'sv',
  /** Tajik/塔吉克语 */
  'tg' = 'tg',
  /** Tamil/泰米尔语 */
  'ta' = 'ta',
  /** Telugu/泰卢固语 */
  'te' = 'te',
  /** Thai/泰语 */
  'th' = 'th',
  /** Turkish/土耳其语 */
  'tr' = 'tr',
  /** Ukrainian/乌克兰语 */
  'uk' = 'uk',
  /** Urdu/乌尔都语 */
  'ur' = 'ur',
  /** Uzbek/乌兹别克语 */
  'uz' = 'uz',
  /** Vietnamese/越南语 */
  'vi' = 'vi',
  /** Welsh/威尔士语 */
  'cy' = 'cy',
  /** Xhosa/科萨语 */
  'xh' = 'xh',
  /** Yiddish/意第绪语 */
  'yi' = 'yi',
  /** Yoruba/约鲁巴语 */
  'yo' = 'yo',
  /** Zulu/祖鲁语 */
  'zu' = 'zu'
}

export enum TranslateService {
  baidu = 'baidu',
  google = 'google',
}

export interface Proxy {
  host: string
  port: number
}

export interface BaiduApiKeyConfig {
  appId: string
  appKey: string
}

export interface ApiKeyConfig {
  type: TranslateService
  [TranslateService.baidu]?: BaiduApiKeyConfig
}

export interface TargetConfig {
  targetLang: Lang
  outPath: string
  rewrite?: (fileName: string) => string
}

export interface Translate {
  label: string
  targetConfig: TargetConfig[]
}

export enum IncrementalMode {
  cover = 'cover',
  fast = 'fast',
}

export interface ExportConfig {
  /**
   * @default 'zh-CN'
   */
  toolsLang?: 'en' | 'zh-CN'
  proxy?: Proxy
  fromLang: Lang
  /**
   * @default 'translate.entry.json'
   */
  fromPath?: string
  apiKeyConfig?: ApiKeyConfig
  /**
   * @default IncrementalMode.cover
   */
  incrementalMode?: IncrementalMode
  /**
   * @default 0
   */
  translateRuntimeDelay?: number
  /**
   * @default 5
   */
  translateRuntimeChunkSize?: number
  /**
   * @default true
   * @description 在翻译运行时启用文案合并功能，减少 API 调用频率，显著提升翻译速度.
   */
  translateRuntimeMergeEnabled?: boolean
  /**
   * @default 5000
   */
  mergeEnabledChunkValuesLength?: number
  ignoreValuesAndCopyToTarget?: string[]
  translate: Translate[]
}
